import fs from 'fs/promises';
import path from 'path';

/**
 * 移除 product.json 中的更新 URL。
 * 遵循 Python 脚本中的逻辑：读取、正则替换、写回。
 */
export async function removeUpdateUrls(productJsonPath: string): Promise<void> {
    if (!productJsonPath || !(await fs.stat(productJsonPath).catch(() => false))) {
        throw new Error('product.json 路径无效或文件不存在。');
    }
    
    const originalContent = await fs.readFile(productJsonPath, 'utf-8');
    
    // 使用正则表达式移除多个已知的更新API地址
    const patterns = [
        /https:\/\/api2\.cursor\.sh\/aiserver\.v1\.AuthService\/DownloadUpdate/g,
        /https:\/\/api2\.cursor\.sh\/updates/g,
        /http:\/\/cursorapi\.com\/updates/g,
    ];

    let newContent = originalContent;
    for (const pattern of patterns) {
        newContent = newContent.replace(pattern, '');
    }

    // 创建备份
    await fs.copyFile(productJsonPath, `${productJsonPath}.bak`);
    // 写回修改后的内容
    await fs.writeFile(productJsonPath, newContent, 'utf-8');
}

/**
 * 删除更新器目录。
 */
export async function removeUpdaterDirectory(updaterPath: string): Promise<void> {
    if (!updaterPath || !(await fs.stat(updaterPath).catch(() => false))) {
        // 目录不存在，视为成功
        return;
    }
    await fs.rm(updaterPath, { recursive: true, force: true });
}

/**
 * 清空 app-update.yml 文件内容。
 */
export async function clearUpdateYmlFile(updateYmlPath: string): Promise<void> {
     if (!updateYmlPath || !(await fs.stat(updateYmlPath).catch(() => false))) {
        // 文件不存在，视为成功
        return;
    }
    await fs.writeFile(updateYmlPath, '', 'utf-8');
}

/**
 * 创建用于阻止更新的文件，并设置为只读。
 */
export async function createBlockingFile(blockPath: string): Promise<void> {
    if (!blockPath) {
        throw new Error('无效的阻止路径。');
    }
    // 确保目录存在
    await fs.mkdir(path.dirname(blockPath), { recursive: true });
    // 创建空文件
    await fs.writeFile(blockPath, '');
    // 设置为只读 (Windows: 0o444, Unix-like: 0o444)
    await fs.chmod(blockPath, 0o444);
}

/**
 * 将 app-update.yml 文件锁定，写入特定内容并设为只读。
 */
export async function lockUpdateYmlFile(updateYmlPath: string): Promise<void> {
    if (!updateYmlPath || !(await fs.stat(path.dirname(updateYmlPath)).catch(() => false))) {
        // 如果目录不存在，无法创建，跳过
        return;
    }
    const lockContent = '# This file is locked to prevent auto-updates\nversion: 0.0.0\n';
    await fs.writeFile(updateYmlPath, lockContent, 'utf-8');
    await fs.chmod(updateYmlPath, 0o444);
} 